import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.Test;
import org.omg.CORBA.INTERNAL;

import java.util.Arrays;
import java.util.jar.JarOutputStream;

/**
 * 数组 Array
 * 数组相当于一堆相同数据类型的数据;
 *
 *
 *
 */
public class 数组 {
    //1.数据定义:4种，创建数组初始化【静态初始化：给定值|动态初始化：无给定值】
    @Test
    public void testArray(){
            //注意：数组长度固定，不能改变
   int[] arr1=new int[4];//Java推荐写法   动态初始化
   int arr2[]=new int[4];//C推荐写法Java兼容动态初始化
   int[] arr3={1,2,3};//静态初始化数组，元素可以直接使用
   int[] arr4=new int[]{1,2,3};//动态初始化
        //数组：内部存数据叫元素?
        //从arr3取出2的元素   数组名   下标
        System.out.println(arr3[1]);
        //从arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到第四个元素值   数组下标越界异常:下标超出数组长度范围
      //System.out.println(arr4[4]);//报错 ArrayIndexOutOfBoundsException

    }

    /**
     *数组的迭代(遍历:输出数组的所有元素值)三种
     * 1.普通迭代方式：for
     * 2.增强for方式：推荐，JD1.5之后
     * 3.工具类:Arrays
     *
     */
@Test
    public void testIterate(){
    int[] arr={1,2,3,4};//静态初始化数组  数组名[下标]
    //for(int i=0;i<arr.length;i++ ){ //拿数组下标
    //    System.out.println(arr[1]);
   // }
     //增强for jdk1.5   遍历数组目的:拿元素值   相同类型才能拿
     //for (int j:arr){//增强for语法(遍历数据类型 引用:数组名)
     // System.out.println(j);
     //}
    //工具类:Arroys.toString()直接打印数组元素值
    System.out.println(Arrays.toString(arr));
}
/**
 * 数组扩容：数组长度固定的，不可改变【可以使用扩容改数组长度】
 *
 */
@Test
    public void testCopy(){
 //字符数组，数组长度固定:2个
 char[] arr={'唐','山'};   //想要：长度增加为4
//扩容 ：增加4个   克隆新的数组
char[] temp=Arrays.copyOf(arr,4);
arr=temp;
arr[2]='工';
arr[3]='业';
    System.out.println(arr);
    //需求：输出唐山工业

}
/**
 * 数组输出元素时，会有一些不同，【查看数据是否为数组】
 * 数据类型：基础数据类型+引用类型
 *
 *
 */
@Test
    public void testArrays(){
    //字符数组
    char[] china={'中','国'};
    System.out.println(china);//输出：中国   字符串：字符数组
    //输出语句--JavaOOP面向对象:重载，字符数组自动拼接
    //数值数组
    int[] i={1,2};
    System.out.println(i);//输出：[I数据类型 @连接符   3d82c5f3 地址值]
}
/**
 * 冒号排序：双层for循环使用：外层for执行一次，内层执行全部
 *
 *
 *
 */
@Test
    public void bubbleSort(){
    //静态初始化数组
    int[] arr={3,6,4,1};//升序输出：  1，3,4,6
//①外层for控制轮  i=0  1  2        3 轮
    for(int i=0;i<arr.length-1;i++){
//②外层for控制次   j=3轮递减-[3~1次]
for (int j=0;j< arr.length-1-i;j++){
//③交换：第一个元素比第二个元素大，条件成立：交换【升序】
if(arr[j]>arr[j+1]){//【相邻元素】 数组名[下标]
    //创建第三方数组，接受   变量名：temp
    int temp=arr[j];//大的元素交给第三方变量保存
    arr[j]=arr[j+1];//第二个元素给第一个元素位置
    arr[j+1]=temp;//保存第三方变量【大数】交给第二个元素



}
   }
    }
    System.out.println(Arrays.toString(arr));//输出数组【遍历数组】
     }
@Test
    public void testSort(){
    int[] arr={3,6,4,1};
    //工具类 Arrays.sort()方法排序，默认升序
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}
}
